﻿package org.jcms.service.base;

import java.io.Serializable;
import java.util.List;

import org.hibernate.criterion.Criterion;
import org.jcms.model.PageBean;

/**
 * 增删改查通用接口 Dao层的接口可以继承本基本接口进行扩展
 * 
 * @author 赵泽洋
 * 
 * @param <T>
 *            要实现基本操作的bean的类
 */
public interface GenericDaoI<T extends Serializable> {

	/**
	 * 新增一条数据
	 * @param entity 实体
	 */
	public abstract void create(final T entity);

	/**
	 * 新增一条数据 若存在则更新
	 * @param entity
	 */
	public abstract void createOrUpdate(final T entity);

	/**
	 * 根据主键查实体
	 * @param id 主键
	 * @return 查询结果
	 */
	public abstract T findById(final Serializable id);

	/**
	 * 根据id删数据，可传多个id
	 * @param entityids id序列
	 */
	public abstract void deleteById(Serializable ... entityids);
	
	/**
	 * 更新实体类到数据库
	 * @param entity 要更新的实体类
	 */
	public abstract void update(final T entity);

	/**
	 * 查所有记录
	 * @return 查询结果
	 */
	public abstract List<T> findAll();

	/**
	 * HQL查记录
	 * @param strHQL HQL语句
	 * @param params 参数
	 * @return 查询结果
	 */
	public abstract List<T> findByHQL(final String strHQL,
			final Object... params);

	/**
	 * HQL分页查找
	 * @param strHQL HQL语句
	 * @param currentPage 查第几页
	 * @param pageSize  一个页面数据的条数
	 * @param params 查询结果
	 * @return
	 */
	public abstract PageBean<T> findByPage(final String strHQL,
			final int currentPage, final int pageSize, final Object... params);

	/**
	 * 用Criteria方式查找数据
	 * @param prams
	 * @return
	 */
	public abstract List<T> findByCriteria(Criterion... prams);
	
	/**
	 * 查全部记录数目
	 * @return
	 */
	public abstract long count();
}
